wayland: Add support for output device removal
authorRob Bradford <rob@linux.intel.com>
Thu, 14 Feb 2013 13:28:07 +0000 (13:28 +0000)
committerRob Bradford <rob@linux.intel.com>
Thu, 14 Feb 2013 13:28:07 +0000 (13:28 +0000)
Since we only receive an object id for the removed object we must try and
remove that from the list of devices based on that id.

gdk/wayland/gdkdisplay-wayland.c
gdk/wayland/gdkprivate-wayland.h
gdk/wayland/gdkscreen-wayland.c

index ecb0e6491ccbb3ec84fbf90007110d72f1b52aed..24f5ceb55038212a40f5828040b9fd186f862940 100644 (file)
@@ -125,9 +125,14 @@ gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id
 }
 
 static void
-gdk_registry_handle_global_remove(void *data,
-                                  struct wl_registry *registry, uint32_t name)
+gdk_registry_handle_global_remove(void               *data,
+                                  struct wl_registry *registry,
+                                  uint32_t            id)
 {
+  GdkWaylandDisplay *display_wayland = data;
+
+  /* We don't know what this item is - try as an output */
+  _gdk_wayland_screen_remove_output_by_id (display_wayland->screen, id);
 }
 
 static const struct wl_registry_listener registry_listener = {
index 21684d8ba8c12d5c633e70519f1421f3054fc999..a80dd15171702bf79f71eb8d1c506b04b04e114a 100644 (file)
@@ -146,8 +146,8 @@ GdkWindow *_gdk_wayland_screen_create_root_window (GdkScreen *screen,
 GdkScreen *_gdk_wayland_screen_new (GdkDisplay *display);
 void _gdk_wayland_screen_add_output (GdkScreen *scren,
                                      struct wl_output *output);
-void _gdk_wayland_screen_remove_output (GdkScreen *screen,
-                                        struct wl_output *output);
+void _gdk_wayland_screen_remove_output_by_id (GdkScreen *screen,
+                                              guint32 id);
 
 void _gdk_wayland_display_manager_add_display (GdkDisplayManager *manager,
                                               GdkDisplay        *display);
index d30cc7c1c9ebd5dac525d12c7a5649f8eaeffaa1..b69d783f6c4c312043e09ebf8a24d71ad18b44af 100644 (file)
@@ -597,7 +597,20 @@ _gdk_wayland_screen_add_output (GdkScreen *screen,
 }
 
 void
-_gdk_wayland_screen_remove_output (GdkScreen *screen,
-                                   struct wl_output *output)
+_gdk_wayland_screen_remove_output_by_id (GdkScreen *screen,
+                                         guint32    id)
 {
+  GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (screen);
+  int i;
+
+  for (i = 0; i < screen_wayland->monitors->len; i++)
+    {
+      GdkWaylandMonitor *monitor = screen_wayland->monitors->pdata[i];
+
+      if (wl_proxy_get_id ((struct wl_proxy *)monitor->output) == id)
+        {
+          g_ptr_array_remove (screen_wayland->monitors, monitor);
+          break;
+        }
+    }
 }